簡體   English   中英

使用bash從具有三列的行中刪除最后一列

[英]Removing last column from rows that have three columns using bash

我有一個包含多行數據的文件。 有些行包含三列,但大多數僅包含兩列。 所有行都是單標簽分隔的。 對於包含三列的數據,第三列通常是多余的,並且包含與第二列相同的數據,因此我想將其刪除。

我想用awk或cut會比較合適,但是我在如何測試三列的行上畫了一個空白,因此我的腳本只能在這些行上工作。 我知道awk是一種非常強大的語言,具有邏輯功能,並且沒有內置任何邏輯,我只是​​不那么強壯。

我看着一個類似的問題 ,但是我不確定awk答案是怎么回事。 因為我只想刪除一列,-4應該是-1嗎? 如果該行有兩列呢? 即使我不想做任何事情,它也會刪除第二個嗎?

我將其修改為我認為的樣子:

awk -F"\t" -v OFS="\t" '{ for (i=1;i<=NF-4;i++){ print $i }}' 

但是,當我運行它(使用文件)時,什么也沒有發生。 如果我更改NF-1或NF-2,我會得到一些輸出,但只有幾行,只有第一列。

誰能告訴我我應該做什么?

如果您只想刪除第三列,則可以只打印第一列和第二列:

awk -F '\t' '{print $1 "\t" $2}'

和cut類似:

cut -f 1,2

awk變量NF為您提供字段編號。 因此,這樣的表達式應該適合您。

awk -F, 'NF == 3 {print $1 "," $2} NF != 3 {print $0}'

像這樣在輸入文件上運行它

a,b,c
x,y
u,v,w
l,m

給我

$ cat test | awk -F, 'NF == 3 {print $1 "," $2} NF != 3 {print $0}'

a,b
x,y
u,v
l,m

這可能對您有用(GNU sed):

sed 's/\t[^\t]*//2g' file

將文件限制為兩列。

awk 'NF==3{print $1"\t"$2}NF==2{print}' your_file

下面的Testde:

> cat temp
1       2
3       4       5
6       7
8       9       10
>
> awk 'NF==3{print $1"\t"$2}NF==2{print}' temp
1       2
3       4
6       7
8       9
>

或以更簡單的方式在awk中:

awk 'NF==3{print $1"\t"$2}NF==2' your_file

或者,您也可以使用perl:

perl -lane 'print "$F[0]\t$F[1]"' your_file

暫無
暫無

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

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