簡體   English   中英

使用awk或cut或perl選擇特定列

[英]Select a particular column using awk or cut or perl

我需要從制表符分隔文件中選擇第7列。 例如:

cat filename | awk '{print $7}'

問題是第4列中的數據有多個值,中間有空白。 示例 - 以下輸出中的最后一行:

user  \Adminis FL_vol Design         0         -       1       -
group        0 FL_vol Design   19324481         -    3014       -
user      \MAK FL_vol Design   16875161         -    2618       -
tree       826 FL_vol Out Global Doc Mark     16875162         -    9618       - /vol/FL_vol/Out Global Doc Mark

如果數據明確地以制表符分隔,那么cut將在選項卡上切割,而不是空格:

cut -f7 filename

你也可以用awk做到這一點:

awk -F'\t' '{ print $7 }'

如果字段由制表符分隔,並且您擔心某些字段包含空格,則此處沒有問題,只需:

cut -f 7

(剪切默認為制表符分隔的字段。)

根據輸入文件的格式判斷,您可以使用-而不是空格來分隔:

awk 'BEGIN{FS="-"} {print $2}' filename
  • FS代表Field Separator,只是將其視為輸入的分隔符。
  • 鑒於我們現在正在划定- ,之前你的第7個領域成為第2個領域。
  • 救一只貓 指定輸入文件filename作為awk的參數。

或者,如果您的數據字段由制表符分隔,則可以更明確地執行以下操作:

awk 'BEGIN{FS="\t"} {print $7}' filename

這將解決問題,因為Out Global Doc Mark看起來被空格分開。

這可能適合你(GNU sed):

sed -r 's/(([^\t]*)\t?){7}.*/\2/' file

此替換命令選擇行中的所有內容並返回第7個非制表符。 sed ,由(...)分組的最后一個東西將通過使用反向引用在替換的左側返回。 在這種情況下,第一反向參考將返回兩個非制表符和制表符(如果存在的NB ?元字符其中一個或沒有該訴訟模式)。該.*剛剛吞噬了剩下的如果有的話。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM