Unix shell:在一行

时间:2016-03-05 12:30:04

标签: bash shell unix

我们有一个文件,其标题格式为:

head_name_1 head_name_2 head_name_3 ... head_name_N

假设分隔符是一个制表符(所以如果我们以某种方式使用cut命令我们不需要指定它)我想找到一个bash shell命令,在标准中打印以下内容输出:

head_name_1
head_name_2
head_name_3
...
head_name_N

假设我们事先不知道N(我知道如何在必要时找到它):

理想解决方案 使用不需要明确计算N的命令。

替代解决方案 :首先找到N然后再做

for i in 1 ... N; do head -1 file | cut -f$i; done

我对第二个解决方案有一些问题:

  • 我可以用while语句递增$ i的值,但我的终端不能正确识别[]和[[]]进行比较。
  • 如果我想使用for语句,我不知道如何生成从1到N的数字列表。

2 个答案:

答案 0 :(得分:6)

用换行符替换所有标签:

tr '\t' '\n' <file >new_file

答案 1 :(得分:1)

tr非常简单。另一种解决方案:

head -1 file | xargs -d '\t' printf "%s\n"