[LeetCode]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.

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/
请尊重作者的劳动成果,转载请注明出处!书影博客保留对文章的所有权利。

如果您喜欢这篇博文,欢迎您捐赠书影博客: ,查看支付宝二维码

Pingbacks已关闭。

评论
  1. William William 发布于 2015年4月22日 15:33 #

    请问 NF > p { p = NF } 是什么意思?为什么我只用 p = NF 会输出原文件的内容再跟上transpose的内容,多谢!

  2. 在线疯狂 在线疯狂 发布于 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

  3. William William 发布于 2015年4月23日 01:02 #

    感谢快速回复!所以 NF > p { p = NF } 是每读一行都执行还是只在最后执行一次?那 p 的初始值是否为 0?另外,我将这行代码删掉,而在 END 中的外层循环里直接用 NF 取代 p 也可以通过测试,请问这样有什么问题吗?

  4. 在线疯狂 在线疯狂 发布于 2015年4月23日 10:07 #

    每行都执行一次,p的初始值应该是“”,由于每行的字段数相同,所以这样也没问题。

  5. William William 发布于 2015年4月23日 14:03 #

    多谢!

张贴您的评论