2017-04-17 51 views
0

我在bash在一個txt文件中的逗號分隔的列表,看起來像這樣:猛砸逗號分隔的列表提取最後一列

name1,org2,enabled,email 
name2,org1,enabled,email 
name3,org3,enabled, 
name4,org4,enabled,email 
name5,org5,enabled, 

我想一個命令,將提取的人誰缺少行的電子郵件,這將是一個什麼命令?感謝

awk -<Flag> <don't know the syntax> 

回答

3

在AWK:

$ awk -F, '$4==""' file 
name3,org3,enabled, 
name5,org5,enabled, 
  • -F,限定FS,輸入文件分隔
  • $4==""輸出記錄,其中第四字段爲空

grep

$ grep ",$" file 
name3,org3,enabled, 
name5,org5,enabled, 
  • ,$回報記錄中,其中最後一個字段爲空
+1

或'awk -F,'$ 4 ==「」{print $ 1}'文件' – Cyrus

+0

它更具描述性。 –

0

的grep方法:

grep -Eo '([^[:space:]]*,){3}$' file 

輸出:

name3,org3,enabled, 
name5,org5,enabled, 

的sed方法:

sed -n '/\(\S*,\)\{3\}$/p' file 
1

我假設你的文件中包含類似行:
name1,org2,enabled,[email protected]name1,org2,enabled,email

此基礎上,你可以使用grep -v(反轉),即:

grep -v '@' file 

輸出:

name3,org3,enabled, 
name5,org5,enabled, 
+1

不錯,開箱即用! – jm666

1

這可能是類似於下面的代碼AWK命令:

awk -F, '$4 == ""' 

此代碼假定:

  1. 每一行是逗號分隔字符串
  2. 第四場可能是空的
  3. 如果第2項爲真,打印整線

編輯: 早期我曾與!$4共享較短的方式。但是這不是一個好方法。有關詳情,請在我的帖子的評論中查找討論。

+0

當'$ 4 == 0'與'$ 4 =='「''不一樣時''$ 4''也被評估爲true。 –

+0

同意。 '!$ 4'不是很好的做法。更好的是更具體。所以'$ 4 ==「」''是最好的方法。 – jsxt

+0

請參閱:http://stackoverflow.com/a/43459414/3776858 – Cyrus