2009-08-14 9 views
1

ファイルを並べ替えることができますが、特定の行以下でのみ並べ替えることができます。手動ソートからはコンテンツを解析できないので、これを行うには2番目のユーティリティが必要です。読む?おそらくawkか?ここで私は並べ替えできるようにしたいと思いますファイルです。この場合のためにそう特定の行からファイルを並べ替える

tar --exclude-from=$EXCLUDE_FILE --exclude=$BACKDEST/$PC-* \ 
-cvpzf $BACKDEST/$BACKUPNAME.tar.gz \ 
/etc/X11/xorg.conf \ 
/etc/X11/xorg.conf.1 \ 
/etc/fonts/conf.avail.1 \ 
/etc/fonts/conf.avail/60-liberation.conf \ 

、私はライン3にソートを開始したいと思います。私はこれにかなり新しい

cat backup.sh | while read LINE; do echo $LINE | sort; done 

のように、この何かをできるように機能をしなければならないつもりだと思っていますし、それは何かが欠けているようにスクリプトが見えます。また、特定の行番号で開始する方法もわかりません。

アイデア?

答えて

3

これは何か?

(head -n 2 backup.sh; tail -n +3 backup.sh | sort) > backup-sorted.sh 

あなたが入力の最後の行をに修復しする必要があります場合は、壊れた「backup-sorted.sh」を持っているかもしれないので...それはおそらく、行継続のための末尾の\を持っていませんちょうど上記を行う。

tarの--files-from(または-T)オプションを使用し、スクリプト自体の代わりにファイルのソートされたリストをデータファイルに含めることを検討してください。 awkを使用して

+0

尾はAHHHHH ... 4を持っています。 –

+0

ええ、質問を読んだ後、あなたは-n +3を望むでしょう。しかし、私は--files-fromを使う方が良い方法だと思っています。 – retracile

+0

これはスティーブの提案に従って少し下に整理できることを発見しました: 'tail -n +3 backup.sh | sort -o backup.sh 'と入力します。 --files-from = ...を行うのはもっと良い選択肢ですが、それが利用可能であることを知らなかった、ありがとう。 – user148813

1

不器用な方法:

len=$(cat FILE | wc -l) 
sortable_len=$((len-3)) 

head -3 FILE > OUT 
tail -$sortable_len FILE | sort >> OUT 

私は誰かがすぐにエレガントな1-ライナーを掲載します確信しています。

0

awk '{ if (NR > 2) { print $0 } }' file.txt | sort 

NRは、組み込みのawk変数と現在のレコード/行番号が含まれています。それは1から始まります。

+1

残念ながら、これは最初の2つの行を完全にスキップするため、元の質問に対する解決策ではありません。 – arielf

0

(2行)ヘッダーを除いた行を表示のために並べ替えます。

cat file.txt | awk '{if (NR < 3) print $0 > "/dev/stderr"; else print $0}' | sort 

(2行)ヘッダを除いた行をソートし、別のファイルに出力します。

方法#1:

cat file.txt | awk '{if (NR < 3) print $0 > "/dev/stderr"; else print $0}' 2> file_sorted.txt | sort >> file_sorted.txt 

方法#2:

関連する問題