入力ファイルからISBN番号(3番目の列)でリストをソートしてから、出力ファイルfile.sh
(file.out
)に送信する必要があります。入力ファイル(file.input
)にはリストがあります。
Donald Smith,Fire Lands,97868545414459
Adam Barry,The Armies,97564325678855
Jennifer Lelan,Childhood dreams,97546766544237
繰り返し構造を使用してデータとヘッダーを処理しますAuthor
Name of book
ISBN
。
結果
Author Name of Book ISBN
Jennifer Lelan Chilhood Dreams 97546766544237
Adam Barry The Armies 97564325678855
Donald Smith Fire Lands 97868545414459
ベストアンサー1
最初の部分は2023年に追加された新しい答えです。以前の答えは、区切り文字の後にも機能します。
$ mlr --icsv --implicit-csv-header --opprint label Author,Title,ISBN then sort -n ISBN file.input
Author Title ISBN
Jennifer Lelan Childhood dreams 97546766544237
Adam Barry The Armies 97564325678855
Donald Smith Fire Lands 97868545414459
これは以下を使用します。ミラー(mlr
)はデータを無題のCSVに読み込み、3つのフィールドにラベルを追加し、フィールドのレコードを数字で並べ替え、ISBN
すべてのデータを「印刷可能な」表形式で出力します。 MillerはCSVをサポートしているため、カンマ、改行などを含む引用フィールドを処理できます。
質問のように長いタイトルの'Name of Book'
代わりに(引用符)を使用してください。タブで区切られた値の出力を生成するには、代わりにTitle
使用してください。--otsv
--opprint
>file.output
ファイルを上書きまたは生成するコマンドをリダイレクトしますfile.output
。
まず、あなたはいいえこのデータを繰り返します。シェルループを使用してテキストを処理するのはなぜ悪い習慣と見なされますか?
ファイルの唯一のカンマがフィールドを区切るカンマである場合
sort -t ',' -k3n -o file.output file.input
データは、3番目の列の数字に基づいて数字でソートされます。出力が記録されますfile.output
。
与えられたデータについてはfile.output
次のようになります。
Jennifer Lelan,Childhood dreams,97546766544237
Adam Barry,The Armies,97564325678855
Donald Smith,Fire Lands,97868545414459
このデータをさらに処理するには、awk
プログラムの使用を検討してください。どのような処理を実行するかを指定していないため、次は各行のデータを変数(実際には不要)に抽出して印刷します。
sort -t ',' -k3n file.input |
awk -F ',' '{ author=$1; title=$2; isbn=$3;
printf("Author: %s\nTitle: %s\nISBN: %s\n",
author, title, isbn) }'
この場合、ソートされたデータを中間ファイルに保存する必要はありません。
質問のデータ出力を提供します。
Author: Jennifer Lelan
Title: Childhood dreams
ISBN: 97546766544237
Author: Adam Barry
Title: The Armies
ISBN: 97564325678855
Author: Donald Smith
Title: Fire Lands
ISBN: 97868545414459
データをクールな列に入れてISBN番号にダッシュを使用する必要はありません。 ISBN番号形式と列形式には、awk
次のものが使用されます。sed
column
sort -t ',' -k3n file.input |
sed -E -e 's/,([0-9]{3})([0-9]{4})([0-9]{5})/,\1-\2-\3-/' |
column -s ',' -t
出力は次のとおりです
Jennifer Lelan Childhood dreams 975-4676-65442-37
Adam Barry The Armies 975-6432-56788-55
Donald Smith Fire Lands 978-6854-54144-59
ISBN番号が少し奇妙に見えます。その理由は長さが14ビットだからです。 本物ISBN長さは10桁または13桁です。、上記のコードでは13桁(または少なくとも12桁)と仮定しています。
列ヘッダーを追加するには:
sort -t ',' -k3n file.input |
{ echo 'Author,Name of book,ISBN'
sed -E -e 's/,([0-9]{3})([0-9]{4})([0-9]{5})/,\1-\2-\3-/'
} |
column -s ',' -t
生産する
Author Name of book ISBN
Jennifer Lelan Childhood dreams 975-4676-65442-37
Adam Barry The Armies 975-6432-56788-55
Donald Smith Fire Lands 978-6854-54144-59
...シェルで明示的なループを使用せずに。