[解決済み] テキストファイルをスペースを含む行の長さでソートする
2022-04-22 09:43:38
質問
次のようなCSVファイルがあります。
AS2345,ASDF1232,平凡な例さん,110 Binary ave.,Atlantis,RI,12345,(999)123-5555,1.56 AS2345,ASDF1232,平野さんの例,1121110 Ternary st. 110 Binary ave...,Atlantis,RI,12345,(999)123-5555,1.56です。 AS2345,ASDF1232、ミスター・プレイン例、110 Binary ave.,Liberty City,RI,12345,(999)123-5555,1.56。 AS2345,ASDF1232、平野さんの例、110 Ternary ave.,Some City,RI,12345,(999)123-5555,1.56。
スペースを含む行の長さでソートしたいのですが。以下のコマンドでは スペースが含まれていますが、これを修正する方法はありますか?
cat $@ | awk '{ print length, $0 }' | sort -n | awk '{$1=""; print $0}'
解決方法は?
回答
cat testfile | awk '{ print length, $0 }' | sort -n -s | cut -d" " -f2-
あるいは、同じ長さの行をすべてサブソートするという、独自の(おそらく意図的でない)方法をとることもできます。
cat testfile | awk '{ print length, $0 }' | sort -n | cut -d" " -f2-
どちらの場合も、最終的なカットには awk を使わないようにすることで、あなたが述べた問題を解決しました。
長さが一致する行 - 同数の場合はどうするか。
質問では、長さが一致する行についてさらなるソートが必要かどうかが指定されていません。 私は、これは不要であると仮定し、以下の使用方法を提案しました。
-s
(
--stable
) を使って、そのような行が互いにソートされるのを防ぎ、入力に現れる相対的な順序を維持するようにします。
(これらのタイのソートをもっと制御したい人は、sort の
--key
オプションがあります)。
問題の解答が失敗する理由 (awk による行の再構築)。
という違いがあるのが面白い。
echo "hello awk world" | awk '{print}'
echo "hello awk world" | awk '{$1="hello"; print}'
これらはそれぞれ
hello awk world
hello awk world
は (gawkの)マニュアルの該当部分 は、1 つのフィールドを変更すると、awk は $0 の全体を (セパレータなどに基づいて) 再構築するということを余談として述べているだけです。 おかしな挙動ではないのでしょう。 こんなのがあるんですね。
"最後に、フィールドと OFS の現在の値を使って、awk にレコード全体を再構築させるのが便利な場合があります。これを行うには、一見無害に見える代入:".を使用します。
$1 = $1 # force record to be reconstituted
print $0 # or whatever else with $0
"This forces awk to rebuild record."
同じ長さの行をいくつか含むテスト入力。
aa A line with MORE spaces
bb The very longest line in the file
ccb
9 dd equal len. Orig pos = 1
500 dd equal len. Orig pos = 2
ccz
cca
ee A line with some spaces
1 dd equal len. Orig pos = 3
ff
5 dd equal len. Orig pos = 4
g
関連
-
[解決済み] Homebrewは最新ですが、`could not link` + `delete path` のエラーは気にしなくていいのでしょうか?
-
[解決済み] 値がベースに対して大きすぎる(エラートークンは "08")[重複]
-
[解決済み] mkdir コマンドが bash スクリプトで見つかりません。
-
[解決済み] IPアドレスのまとめ方
-
[解決済み] ファイルからn行目を取得するBashツール
-
[解決済み] Bashコマンドからテキストファイルの内部を検索・置換する
-
[解決済み] React Nativeの<Text>コンポーネントに改行を挿入するにはどうすればよいですか?
-
[解決済み】文字列をテキストファイルに出力する
-
[解決済み】bash/sedスクリプトを使用してテキストファイルの最初の行を削除するにはどうすればよいですか?
-
[解決済み】固定長 6 int 配列の最速ソート
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Bashのif条件で「unary operator expected」エラーが発生する。
-
[解決済み] MacOSのbashターミナルでexport PS1="\u[\033[m]@[\033[32m]\h:\[\033[33;1m]\w[\033[m]\$" は何を意味していますか?
-
[解決済み] Cp: ターゲットはディレクトリではありません
-
[解決済み] Bashで文字列から改行を削除する方法
-
[解決済み] ファイルに書き込むが、ファイルが存在する場合は上書きする
-
[解決済み] Bashスクリプトで引数を反復処理する方法
-
[解決済み] ssh / リモートbashコマンドでシングルクォート文字をエスケープするにはどうすればよいですか?
-
[解決済み] パイプと二重パイプのどちらの OR 演算子を使うか?
-
[解決済み] bashでのDiffコマンド
-
[解決済み] シェルスクリプトでの連想配列