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

Swap columns of a file - Linux (exact position, not word)

我想知道如何用 Linux 交换文件的列(确切的字符)(使用 cut、awk、sed 或任何你能帮助我的方法)。 我已经了解了如何交换整个表达式(使用定界符)和整个单词。

示例:

128934
38 2008

将第 3 列与第 5 列交换:

123984
3802 08

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

有点笨拙,用sed:

$ sed -E 's/^(..)(.)(.)(.)//' infile
123984
3802 08

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

您可以使用 gawk、mawk、nawk 和 busybox awk 以及这个非posix 兼容示例来完成此操作:

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

输出:

123984
3802 08