交换文件的列 - Linux(确切的位置,而不是单词)

时间:2017-08-04 21:55:13

标签: linux awk sed cut

我想知道如何用Linux交换文件的列(确切字符)(使用cut,awk,sed或任何你可以帮助我的东西)。 我已经看到如何交换整个表达式(使用分隔符)和整个单词。

示例:

128934
38 2008

用5:

交换第3列
123984
3802 08

另一种问这个问题的方法是将每行的第3个字符与第5个字符交换。

2 个答案:

答案 0 :(得分:2)

你可以用gawk,mawk,nawk和busybox awk这个非posix complient例子做到这一点:

awk -v FS='' -v OFS='' '{ t=$3; $3=$5; $5=t } 1' infile

输出:

123984
3802 08

答案 1 :(得分:1)

有点笨拙,用sed:

$ sed -E 's/^(..)(.)(.)(.)/\1\4\3\2/' infile
123984
3802 08

这将捕获四组中每一行的前五个字符,然后重新排列它们。 -E只是为了方便;没有它,我们必须像\(.\)中那样逃避括号。