题目
- Transpose File
Given a text file file.txt
, transpose its content.
You may assume that each row has the same number of columns and each field is separated by the ' '
character.
Example:
If file.txt
has the following content:
name age
alice 21
ryan 30
Output the following:
name alice ryan
age 21 30
解法1
awk -F ' ' '
BEGIN { ORS=""; i=0; nf=1;};
{
{ for(line=1; line<=NF; line++)
{ N[FNR][line] = $line; nf=NF;}; i++
}
};
END { for(itnf=1; itnf<=nf; itnf++)
{ for(it=1;it<=i;it++) {
print N[it][itnf];
{ if(it != i) print " "; }
};
print "\n";
}
}' file.txt
-
BEGIN { ORS=""; }
: 每次输出后不必自动换行, 直接连着输出下一个。(这题中输出空格和换行由我们自己控制。)
ORS The output record separator, by default a newline.
-
i
为行号,自然从0开始计数。 -
NR
: 当前行号(current line number),但是会在多个文件之间被累计。 -
FNR
: 当前文件的行号。 -
NF
: 当前行中字段的总数。 - 但是这题中我们的二维数组
N
两个维度的角标都从1
开始。 - 思路就是使用一个二维数组用行的方式去存储,但是用列的方式去输出。(即Transpose这词的意思。)
解法2
awk '
{
for (i = 1; i <= NF; i++) {
if (FNR == 1) {
t[i] = $i;
} else {
t[i] = t[i] " " $i
}
}
}
END {
for (i = 1; t[i] != ""; i++) {
print t[i]
}
}
' file.txt
- 思路类似,但是没有用二位数组。
-
t[i] = t[i] " " $i
: 而是对源文件中每一行中的字段以此并入(append)数组的每一个位置。
引用和推荐阅读:
https://leetcode.com/problems...
https://leetcode.com/problems...
https://stackoverflow.com/a/2...
https://www.grymoire.com/Unix...
该文章遵循创作共用版权协议 CC BY-NC 4.0,要求署名、非商业 、保持一致。在满足创作共用版权协议 CC BY-NC 4.0 的基础上可以转载,但请以超链接形式注明出处。文章仅代表作者的知识和看法,如有不同观点,可以回复并讨论。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。