题目描述:
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.
For example, if file.txt has the following content:
name age alice 21 ryan 30
Output the following:
name alice ryan age 21 30
题目大意:
给定一个文本文件file.txt,将其内容进行转置。
你可以假设每行包含的列数相同,每一个字段都由' '字符隔开。
例如,如果file.txt包含下面的内容:
name age alice 21 ryan 30
输出下面的内容:
name alice ryan age 21 30
Bash脚本:
# Read from the file file.txt and print its transposed content to stdout.
awk '
{
for (i = 1; i <= NF; i++) {
a[NR, i] = $i
}
}
NF > p { p = NF }
END {
for (j = 1; j <= p; j++) {
str = a[1, j]
for (i = 2; i <= NR; i++){
str = str " " a[i, j]
}
print str
}
}' file.txt
参考LeetCode Discuss:https://leetcode.com/discuss/29462/ac-solution-using-awk-and-statement-just-like-c
本文链接:http://bookshadow.com/weblog/2015/03/28/leetcode-transpose-file/
请尊重作者的劳动成果,转载请注明出处!书影博客保留对文章的所有权利。
William 发布于 2015年4月22日 15:33 #
请问 NF > p { p = NF } 是什么意思?为什么我只用 p = NF 会输出原文件的内容再跟上transpose的内容,多谢!
在线疯狂 发布于 2015年4月22日 17:46 #
NF > p { p = NF } 意思是取得文件中的最大字段数并赋给p。NF is the number of fields in the current record. 参考http://pubs.opengroup.org/onlinepubs/7908799/xcu/awk.html
William 发布于 2015年4月23日 01:02 #
感谢快速回复!所以 NF > p { p = NF } 是每读一行都执行还是只在最后执行一次?那 p 的初始值是否为 0?另外,我将这行代码删掉,而在 END 中的外层循环里直接用 NF 取代 p 也可以通过测试,请问这样有什么问题吗?
在线疯狂 发布于 2015年4月23日 10:07 #
每行都执行一次,p的初始值应该是“”,由于每行的字段数相同,所以这样也没问题。
William 发布于 2015年4月23日 14:03 #
多谢!