この9月にITエンジニアとしてスタートしたばかりの、初心者で恐縮なのですが、
linux 5の環境下で下記のような事をしようとしています。
■test.csvの内容を読み込んで結果を出力し、その出力結果を使う。
test.csvの内容
001.txt,100,200
002.txt,300,400
このtest.csvから各行の1フィールド目を順に読み込んで
cp -p 001.txt 001_200.txt
cp -p 002.txt 002_300.txt
という感じで新しくファイルをコピーして作成しようと考えています。
awkで順に出力してコピーしようとしたのですが、
組込変数のNRがawk内で外部変数(?すみません、ここがよく理解できていません)を使えないように
思えて前に進めない状態です。
NR==i (NR==${i}と記述するのはNG??)として
for i `seq 1 N`
do
a=`awk BEGIN{FS=","}(NR==i){print $2}`
done
のように書きたいのですが、これはawkの文法から不可能なのでしょうか?
大変申し訳ございませんが、追記・追加情報必要であれば補足します。
雲をつかむようですみません。全部のコード(?)を載せるのは仕事上まずいかなと思いまして
こんな書き方になってしまいました。
No.1ベストアンサー
- 回答日時:
つい先日も書いたんだけど
http://oshiete.goo.ne.jp/qa/6150647.html
awkとシェルとはまったく別と言ってよい処理系なので、シェルの変数の内容をawkに渡すには
・シェルの置換機能を使って、awkスクリプト文字列に埋め込む
・awk の -v オプションでawkの変数に代入する
という方法を使います。
ただね.....
多分、他の言語(CとかBasicとか)の考え方なのかもしれませんが、NR==で行番号指定して処理するのって、(数行だけならともかく)全行にわたって行うのはすごい無駄です。
特に、この例では行番号は関係ないですから。
先のURLにあるような方法で1行ずつ行う方が効率はいいです。
さらに言えば、処理がそのコピーだけなら、シェル変数に代入する必要すらなく、1行でできます
awk 'BEGIN{FS=","} {prinf "cp %s %s_%s.txt" $1,$2,$3}' < test.csv | sh
shを使わず、awkのsystem関数を使う方法もあります
awk 'BEGIN{FS=","} {system( sprinf("cp %s %s_%s.txt" $1,$2,$3))}' < test.csv
あるいは、awkを使わずsedで
sed 's/^\([^,]*\),\([^,]*\),\([^,]*\).*/cp \1 \2_\3.txt/' test.csv | sh
先頭の指定行だけ処理したいのなら、headコマンドで
head -10 test.csv | sed 's/^\([^,]*\),\([^,]*\),\([^,]*\).*/cp \1 \2_\3.txt/' test.csv | sh
(この例は10行)
等々
パイプを使った処理はUnix系OSの肝とも言えるものです。
また、awkは実に便利なプログラム言語です。
解説書や解説サイトも沢山あるので、勉強してみてください。
非常に曖昧な質問に対して、理解し易いご回答ありがとうございます。
慣れてないという事ではなく、根本の理解不足と勉強不足を痛感しました。
kmeeさんのようになれるには、どのくらいの期間を要するのか興味のある所ですが、
これからも解説書や解説サイトで勉強していきます。
本当にありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- UNIX・Linux Linuxについて質問です。 以下のhistoryの出力結果から、sedコマンドのファイル名tmp1 1 2023/02/03 20:11
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- その他(プログラミング・Web制作) テキストデータ変換(プログラミング、linux、python) 8 2023/08/08 16:39
- その他(プログラミング・Web制作) python OpenPyXLを使って出力結果をエクセルに書き込み 2 2022/06/04 19:46
- その他(プログラミング・Web制作) awkの$NR 2 2022/10/24 11:11
- C言語・C++・C# 至急教えてください!プログラミングの問題です。 入力待ちをして、受け取った正の整数が表す行数だけ既存 4 2022/07/05 10:12
- HTML・CSS HTMLタグのあるCSVファイルを利用する方法 4 2023/03/19 14:41
- その他(プログラミング・Web制作) ファイル名の一部をbatで変更したい batファイルを使って、以下のようにファイル名の一部を変更した 3 2023/02/21 20:09
- Excel(エクセル) PowerQueryに詳しい方教えてください(Office365) 1 2022/07/24 21:11
- Visual Basic(VBA) VBAでの共有パスにつきまして 1 2023/03/04 17:24
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プログラム言語について。
-
VBAでパワーシェルを実行したい...
-
C#とC++について。
-
CLispのloop内の挙動について
-
interface 2021年5月号 P46
-
VBA 電話番号の正規表現について
-
Windowsのアプリ開発ってなんの...
-
プログラミングのPythonのnoteb...
-
vba クリップボードクリアにつ...
-
ImageMagickでgif画像の一部が...
-
ExcelVBAでFormulaR1C1を列範囲...
-
pythonにてseleniumを使うも、...
-
ホワイトハッカー
-
小学1年生の子です。塾に行かせ...
-
pythonで複数画像からgifを作る...
-
ハッシュテーブル(連想配列)が...
-
httpリクエストの送り元の特定
-
楽しくて最高のプログラミング...
-
プログラミング
-
家庭のパソコンで Python の 環...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラミング
-
小学1年生の子です。塾に行かせ...
-
vba クリップボードクリアにつ...
-
プログラマーと学歴の関係性に...
-
Webサイト内に埋め込んだmp4動...
-
正規表現で複数マッチ条件で悩...
-
windowsでテキストファイルの各...
-
楽しくて最高のプログラミング...
-
プログラミング ソースコード
-
Pythonって何を意識した言語な...
-
プログラミングを教えたいです...
-
pythonで複数画像からgifを作る...
-
pythonにてseleniumを使うも、...
-
Pythonでgif画像が上手く作れない
-
Google ColaboでGUI作成
-
テキストファイルのファイル名...
-
プログラミング、アーキテクチ...
-
そのまま使っただけなのに・・...
-
このURLで広告を出しているのは...
-
chatGPTで次々と質問をしていく...
おすすめ情報