0

比較したいファイルが 2 つあります。1 つのファイルの注文番号

1    somedata  otherdata
2    somedata  otherdata
3    somedata  otherdata
4    somedata  otherdata
5    somedata  otherdata
6    somedata  otherdata
7    somedata  otherdata
8    somedata  otherdata
Y    somedata  otherdata
Y    somedata  otherdata

その他の注文

1    somedata  otherdata
10    somedata  otherdata
11    somedata  otherdata
12    somedata  otherdata
.
.
.
2    somedata  otherdata
Y   somedata  otherdata
Y   somedata  otherdata

実行する前に 2 番目のファイルを並べ替えることができれば (最初のファイルには保持したいヘッダーがあるため、そのヘッダーの各行は # で始まります)、私の人生は無限に楽になります。リンゴとリンゴを比較しています。

私は試しました: sort -n /home/me/file.txt -o /home/me/newfile.txt

そして、これは私が望んでいることのほとんどですが、文字を下ではなく上に置きます。このような:

    Y    somedata  otherdata
    Y    somedata  otherdata
    1    somedata  otherdata
    2    somedata  otherdata
    3    somedata  otherdata
    4    somedata  otherdata
    5    somedata  otherdata
    6    somedata  otherdata
    7    somedata  otherdata
    8    somedata  otherdata

数値で並べ替えるが、最後に文字が一番下になるにはどうすればよいですか? または、それができない場合、おそらく特定の文字で始まる行を除外する方法はありますか?

4

4 に答える 4

1
cat /tmp/file.list | sort -n | grep -v ^[A-Z] > /tmp/file.list.sorted; grep ^[A-Z] /tmp/file.list  >> /tmp/file.list.sorted

これにより、/tmp/file.list にあるファイルの内容が数値的にソートされ (大文字で始まる文字列は除外されます)、その内容が /tmp/file.list.sorted に書き込まれます。次に、元の file.list が再度解析されます。今度は大文字で始まる行が取得され、結果が /tmp/file.list.sorted の末尾に追加されます。

于 2013-04-05T20:15:05.617 に答える
0

並べ替えを実行する前にヘッダー行を引き出して、後で追加し直すことができます。ヘッダー行がある場合$n、次のようにすると、その後のすべてがパイプアウトされます。

head -n $n filewithheader.txt >newfile.txt
tail -n $((cat filewithheader.txt| wc -l -$n)) | sort -n >>newfile.txt

これで、ファイルをすべて同じように並べ替えることができます。

本当にアルファベット順に並べ替えてから数値順に並べ替えたい場合は、grep でテキストで始まる行を 1 つのファイルに取得し、数字で始まる行を 2 番目のファイルに grep して、それらを個別に並べ替えてから結合します。それが役立つことを願っています。

于 2013-04-05T20:11:04.373 に答える