Linux

bash +如何驗證每行中的所有單詞具有相同的計數

  • January 16, 2018

如何驗證每行中的所有單詞/字元串是否具有相同的計數

如果每行中的所有單詞都具有相同的計數,則語法將返回 true 和計數單詞的數量

如果行的計數不同,則語法將返回 false 和 count=NA

例如對於以下範例,我們將得到true並且count=5

sdb sde sdc sdf sdd
sdc sdb sde sdd sdf
sdb sdc sde sdf sdd
sde sdb sdd sdc sdf
sdc sde sdd sdb sdf

關於以下範例的範例,我們將得到falsecount=NA

sdb sde sdc sdf sdd
sdc sdb sde sdd sdf
sdb sdc sde sdf 
sde sdb sdd sdc sdf
sde sdd sdb sdf

關於以下範例的另一個範例,我們將得到falsecount=NA

sdb sde sdc sdf sdd
sdc sdb sde sdd sdf
sdb sdc sde sdf 
sde sdb sdd sdc sdf
sde sdd sdb sdf sde 

使用awk

awk 'BEGIN { r = "true" } NR == 1 { n = NF; next } NF != n { r = "false"; n = "N/A"; exit } END { printf("status=%s count=%s\n", r, n) }' somefilename

或作為awk腳本:

#!/usr/bin/awk -f

BEGIN { r = "true" }

NR == 1 { n = NF; next }
NF != n { r = "false"; n = "N/A"; exit }

END { printf("status=%s count=%s\n", r, n) }

該腳本將從設置r(如“結果”)開始true(我們假設它是真而不是假)。然後它初始化n(如“數字”)為第一行的欄位數。

如果輸入數據中的任何其他行具有不同數量的欄位,r則設置為falsen設置為N/A並且腳本退出(通過END塊)。

最後,列印r和的目前值。n


該腳本的輸出將類似於

status=true count=5

或者

status=false count=N/A

這可以與exportor bash’sdeclare或一起使用eval

declare $( awk '...' somefilename )

這將創建 shell 變數countstatus並且這些變數將在呼叫 shell 中可用。

引用自:https://unix.stackexchange.com/questions/417470