1

空白のフィールドがあるすべての行をテキストファイルから削除したいと思います。次のコードを変更して、ファイルに直接変更を加えるにはどうすればよいですか?

awk '!/^\t|\t\t|\t$/' *.txt    

AD  125.9    MN 124.9
AC  38.9     VG 13.2
AV  34.6     BG 33.0
GL  126.2   
CY  34.9    
CY  44.9    

希望する出力

AD  125.9    MN 124.9
AC  38.9     VG 13.2
AV  34.6     BG 33.0
4

5 に答える 5

7

代替のawkワンライナー:

awk 'NF==4' yourFile
于 2012-10-01T08:22:53.750 に答える
3

使用する1つの方法GNU sed

sed -n -s -i '/[^ \t]* [^ \t]* [^ \t]* [^ \t]/p' *.txt

結果:

AD  125.9    MN 124.9
AC  38.9     VG 13.2
AV  34.6     BG 33.0
于 2012-10-01T09:45:15.487 に答える
0

元のawkコマンドでforループを使用できます。

for f in *.txt
do
  cp $f /tmp/mytempfile
  awk '!/^\t|\t\t|\t$/' /tmp/mytempfile > $f
done
于 2012-10-01T08:02:07.077 に答える
0

入力を使用すると、これが機能する場合があります(ただし、スペースまたはタブがあるかどうかによって異なります)。

sed '/^.\{13\}\s/d' INPUTFILE

またはこれ:

awk 'substr($0,14,1) = " " { print }' INPUTFILE
于 2012-10-01T08:02:24.370 に答える
0

ファイルに最大4つのフィールドがあると仮定します。

awk '{for(i=1;i<5;i++){if($i=="")next;}print}' file_name

以下でテスト済み:

> cat temp
AD      125.9    MN     124.9
AC      38.9     VG     13.2
AV      34.6     BG     33.0
GL      126.2
CY      34.9
CY      44.9
>awk '{for(i=1;i<5;i++){if($i=="")next;}print}' temp
AD      125.9    MN     124.9
AC      38.9     VG     13.2
AV      34.6     BG     33.0
>
于 2012-10-01T08:24:04.343 に答える