2

假设我有以下文本文件,其中包含空格、制表符以及这些单词之间的任何内容:

1     test.1
2  word.2
3   whatever.5

我想提取第二列(不适cut -d' ' -f2 test.txt用于我无法理解的),然后是小数点前的部分,并将该结果单独提供给一些代码。所以上面的文本文件应该创建三个命令:

mycommand test
mycommand word
mycommand whatever

我尝试了以下构造:

cat test.txt | gawk '{print $2;}' | gawk -F[.] '{print $1;}' | xargs  -0 mycomand

这不会产生预期的结果(即创建三个不同的工作)。

问题: 1. 怎么做才对?2. 如何简化表达式 3. 表达式有什么问题cut

4

3 回答 3

2

-0参数放到中。您将换行符分隔的输入提供给,而不是 NUL 分隔的。另外传递 -n 1mycommand以在每个输入行执行一次。此外,您可以将调用组合到

gawk -F'[[:space:]]+|[.]' '{print $2}'
于 2013-10-04T19:21:36.060 回答
1
$> grep -P -o "(?<= )[^\ \.]+" test.txt | xargs mycommand
于 2013-10-04T19:24:18.510 回答
1

如果您想要另一种方法来做到这一点,Perl 会回答:

perl -ne'print (((/^\d+\s+([^\.]+)/)[0])."\n")'
于 2013-10-04T19:27:10.027 回答