Git-bash UNIX:使用 cut 切换列/字段?

Git-bash UNIX:使用 cut 切换列/字段?

所以我有一个包含 2 列的文件,如下所示:

  10  1
  11  2
  12  3
  13  4
  14  5

我想使用 cut 命令切换列。我用过

paste <(cut -f2 file.dat) <(cut -f1 file.dat)

它给了我以下内容:

  10  1  10  1
  11  2  11  2
  12  3  12  3
  13  4  13  4
  14  5  14  5

有人知道我如何使用cutpaste切换列吗?我以为cut -f1orcut -f2会剪切每个字段,但显然不是?我在这里做错了什么?

更新:所以我使用的是-d而不是f,它给了我奇怪的结果,但当我的cat文件,内容保持不变?

答案1

默认分隔符cut是制表符 - 如果您想要以cut空格分隔数据,则需要使用参数指定-d

您的输入文件似乎使用多种的增加难度的空格:

paste <(cut -d' ' -f5 file.txt) <(cut -d' ' -f3 file.txt)
1   10
2   11
3   12
4   13
5   14

或者您可以用制表符替换空格(挤出重复) - 请注意,字段将变为-f3和 ,-f2因为您的文件具有前导空格:

paste <(tr -s ' ' '\t' < file.txt | cut -f3) <(tr -s ' ' '\t' < file.txt | cut -f2)

awk在这种情况下,使用例如会更简单

awk '{print $2,$1}' file.txt

或者

awk '{print $2,$1}' OFS='\t' file.txt

如果您想要制表符分隔的输出(正如您从 获得的那样paste)例如。

$ awk '{print $2,$1}' OFS='\t' file.txt
1   10
2   11
3   12
4   13
5   14

答案2

所以我想出了我想用以下内容做什么:

cut -d' ' -f1 file.txt > f1.txt

剪切第一列并将其附加到新文件 f1.txt

cut -d' ' -f4 file.txt > f2.txt

剪切第二列并将其附加到新文件 f2.txt

paste f2.txt f1.txt > file.txt

最后用切换的列覆盖原始 file.txt。

相关内容