2013-10-04 33 views
2

Suposing我有一個空格,製表符下面的文本文件,不管那些話之間:如何從列中提取文本並將它們提供給Linux(bash)上的代碼?

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表達式有什麼問題?

+0

以'cat'線做的對我的機器上 –

+0

那麼也許我可以把兩個gawks合併成一個? – Alex

+0

這很難... –

回答

2

-0參數丟棄到。您正在將換行符分隔的輸入提供給,而不是NUL分隔的。另外,通過-n 1以對每個輸入行執行mycommand一次。 此外,可以將您的調用結合

gawk -F'[[:space:]]+|[.]' '{print $2}' 
+0

然後只有第一個術語(測試)被傳遞給'mycommand'。所有其他參數都被忽略。 – Alex

+0

@Alex,查看更新的答案 – iruvar

+0

完美。矩形托架前面的豎條是什麼? – Alex

1
$> grep -P -o "(?<=)[^\ \.]+" test.txt | xargs mycommand 
1

的Perl如果你想另一種方式來做到這一點的回答:

perl -ne'print (((/^\d+\s+([^\.]+)/)[0])."\n")' 
相關問題