交换文件的列 - 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
我想知道如何用 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