我想做这样的事情:
cat abcd.txt | cut -f 2,1
字符串我希望输出的顺序是2,然后是1。在我测试的机器上(FreeBSD 6),这是不会发生的(它以1,2的顺序打印)。你能告诉我怎么做吗?我知道我总是可以写一个shell脚本来做这个逆转,但我正在寻找的东西使用'削减'命令选项。我想我使用的是包含cut的coreutils 5.2.1版本。
rqdpfwrv1#
使用cut无法完成此操作。根据手册页:所选输入的写入顺序与读取顺序相同,并且只写入一次。修补cut已经是proposedmanytimes,甚至是complete patches have been rejected。相反,您可以使用awk来执行此操作,如下所示:
cut
awk
awk '{print($2,"\t",$1)}' abcd.txt
字符串将\t替换为您正在使用的字段分隔符。
\t
vzgqcmou2#
Lars的答案很棒,但我发现了一个更好的答案。他的问题是它匹配\t\t,因为没有列。要解决这个问题,请使用以下命令:
awk -v OFS=" " -F"\t" '{print $2, $1}' abcd.txt
字符串其中:-F"\t"是在 exactly 上剪切的内容(制表符)。-v OFS=" "是用来分隔的(两个空格)范例:
-F"\t"
-v OFS=" "
echo 'A\tB\t\tD' | awk -v OFS=" " -F"\t" '{print $2, $4, $1, $3}'
型这将产生:
B D A
型
ddhy6vgd3#
以下是perl版本,仅供参考:
perl
cat abcd.txt | perl -ne 'chomp; @F=split; print("$F[1]\t$F[0]\n")'
字符串我显式地使用split,因为我通常只想在\t(split("\t"))上进行拆分。
split
split("\t")
3条答案
按热度按时间rqdpfwrv1#
使用
cut
无法完成此操作。根据手册页:所选输入的写入顺序与读取顺序相同,并且只写入一次。
修补
cut
已经是proposedmanytimes,甚至是complete patches have been rejected。相反,您可以使用
awk
来执行此操作,如下所示:字符串
将
\t
替换为您正在使用的字段分隔符。vzgqcmou2#
Lars的答案很棒,但我发现了一个更好的答案。他的问题是它匹配\t\t,因为没有列。要解决这个问题,请使用以下命令:
字符串
其中:
-F"\t"
是在 exactly 上剪切的内容(制表符)。-v OFS=" "
是用来分隔的(两个空格)范例:
型
这将产生:
型
ddhy6vgd3#
以下是
perl
版本,仅供参考:字符串
我显式地使用
split
,因为我通常只想在\t
(split("\t")
)上进行拆分。