Bash 忽略空字段

Bash 忽略空字段,bash,awk,Bash,Awk,给定这个文件 $ cat foo.txt ,,,,dog,,,,,111,,,,222,,,333,,,444,,, ,,,,cat,,,,,555,,,,666,,,777,,,888,,, ,,,,mouse,,,,,999,,,,122,,,133,,,144,,, 我可以这样打印第一个字段 $ awk -F, '{print $5}' foo.txt dog cat mouse 但是,我想忽略这些空字段,以便可以这样调用 $ awk -F, '{print $1}' foo.txt

给定这个文件

$ cat foo.txt
,,,,dog,,,,,111,,,,222,,,333,,,444,,,
,,,,cat,,,,,555,,,,666,,,777,,,888,,,
,,,,mouse,,,,,999,,,,122,,,133,,,144,,,
我可以这样打印第一个字段

$ awk -F, '{print $5}' foo.txt
dog
cat
mouse
但是,我想忽略这些空字段,以便可以这样调用

$ awk -F, '{print $1}' foo.txt
您可以这样使用:

$ awk -F',+' '{print $2}' file
dog
cat
mouse
类似地,你可以使用3美元、4美元和5美元等等$在这种情况下不能使用1,因为记录以分隔符开头。

您可以这样使用:

$ awk -F',+' '{print $2}' file
dog
cat
mouse
awk -F, '{gsub(/^,*|,*$/,"");gsub(/,+/,",");print $1}' your_file
类似地,你可以使用3美元、4美元和5美元等等$在这种情况下不能使用1,因为记录以分隔符开头

awk -F, '{gsub(/^,*|,*$/,"");gsub(/,+/,",");print $1}' your_file
测试如下:

> cat temp
,,,,dog,,,,,111,,,,222,,,333,,,444,,,
,,,,cat,,,,,555,,,,666,,,777,,,888,,,
,,,,mouse,,,,,999,,,,122,,,133,,,144,,,
执行:

> awk -F, '{gsub(/^,*|,*$/,"");gsub(/,+/,",");print $1}' temp
dog
cat
mouse
测试如下:

> cat temp
,,,,dog,,,,,111,,,,222,,,333,,,444,,,
,,,,cat,,,,,555,,,,666,,,777,,,888,,,
,,,,mouse,,,,,999,,,,122,,,133,,,144,,,
执行:

> awk -F, '{gsub(/^,*|,*$/,"");gsub(/,+/,",");print $1}' temp
dog
cat
mouse

您可以使用
tr-s'field'
删除字段的多次重复:

$ tr -s ',' < your_file
,dog,111,222,333,444,
,cat,555,666,777,888,
,mouse,999,122,133,144,

您可以使用
tr-s'field'
删除字段的多次重复:

$ tr -s ',' < your_file
,dog,111,222,333,444,
,cat,555,666,777,888,
,mouse,999,122,133,144,
这不是awk,但您将使用1而不是2

这不是awk,但您将使用1而不是2。

$awk'{print$1}'FPAT=[^,]+foo.txt 狗 猫 老鼠
$awk'{print$1}'FPAT=[^,]+foo.txt
狗
猫
老鼠

@sudo_O:没有具体的原因这样..你是对的,里面说得很清楚..更新它..@sudo_O:没有具体的原因这样..你是对的,里面说得很清楚..更新它..我会做
tr-s',“
删除UOOC:]我试过
tr-s',file
,但没有成功。我知道会有办法的,谢谢@sudo_O!是的,
tr
仅从
stdin
读取,因此读取文件时需要重定向!我会做
tr-s',“
来删除UOOC:]我尝试了
tr-s',file
,但没有成功。我知道会有办法的,谢谢@sudo_O!是的,
tr
仅从
stdin
读取,因此读取文件时需要重定向!如果字段为
,,,dog,,foo,,,111,,,,222,,,333,,,444,,,
则此项不起作用,如果字段为
,,dog,,,foo,,,,111,,,222,,,333,,,,444,,,