Unix(Sun Solaris)で特定のパターンに行をマージする方法

Unix(Sun Solaris)で特定のパターンに行をマージする方法

私は以下を持っていますNフラットファイルの行数:

uk,1234560000
uk,6789067000
uk,4567890000
.
.
.
n lines

これで、次の形式で作成する必要があります。

uk,1234560000-1234560000,6789067000-6789067000,4567890000-4567890000,......

どのように切り替えることができますか?

ベストアンサー1

これを行う方法はいくつかあります。以下はシェルのみを使用することです(外部プログラムなし)。

#!/bin/sh
IFS=, read -r f1 f2
printf "%s,%s-%s" "$f1" "$f2" "$f2"
while IFS=, read -r f1 f2
do
    printf ",%s-%s" "$f2" "$f2"
done
printf "\n"

myscript.sh上記の内容をdochmod +x myscript.shとrunというファイルに入れ、./myscript.sh入力と出力が必要な場所にリダイレクトされます。

コードはとても簡単です

  • で区切られた2つのフィールドを読み取ります,。 field1 ,field2 -field2 書き込み ,いいえ改行文字で終了します。
  • ファイルの終わりではありませんが、2 つのフィールドを読み込み、2 番目のフィールドを,2 回書き、前に a を置いて,、 a で区切り-、改行文字で終わりません。
  • ファイル全体を読み取った後(ファイルの終わりに到達)、改行文字を書き込みます。

おすすめ記事