質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
AWK

AWKは、UNIX 上で開発されたプログラミング言語で、CSVファイルなどのテキストファイルの処理を目的にデザインされています。

Q&A

1回答

372閲覧

Linux/UNIXでawkを使ってファイルの特定列だけ編集

ronronK

総合スコア6

AWK

AWKは、UNIX 上で開発されたプログラミング言語で、CSVファイルなどのテキストファイルの処理を目的にデザインされています。

0グッド

0クリップ

投稿2018/05/11 16:11

前提・実現したいこと

Linux/UNIXでawkを使ってファイルの特定列だけ編集

基本的な内容だと思いますが、
現在、Linux/UNIXが使えないため動作するかわかりません。
ご回答お願いします。awkの文法についてです。

発生している問題・エラーメッセージ❶

特定列だけトリムしたいです。
以下で動作するでしょうか?

該当のソースコード

awk '{FS=",";OFS=","}{$2=substr($2,1,4)}1' 対象ファイル

発生している問題・エラーメッセージ❷

また、最終的にはshell関数としたいです。
以下で動作するでしょうか?
変数がawkに引き渡せているかわかりません。

該当のソースコード

function() {
file=$1
ichi=$2
kazu=$3
awk -v "fi=$file" "ic=$ichi" "kz=$kazu" '{FS=",";OFS=","}{$ic=substr($ic,1,kz)}1' fi
}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

awk '{FS=",";OFS=","}{$2=substr($2,1,4)}1'だと、FSが設定される前に1行目が読み込まれてしまっていますから、FSの変更は2行目から効きます。
awk 'BEGIN{FS=",";OFS=","}{$2=substr($2,1,4)}1'が正しいです。

Bash

1foo() { 2file=$1 3ichi=$2 4kazu=$3 5awk -v "ic=$ichi" -v "kz=$kazu" 'BEGIN{FS=",";OFS=","}{$ic=substr($ic,1,kz)}1' $file 6}

ですね。
functionは予約語なので、関数名には使えない。-vは変数ごとに必要。シェル変数とawk変数の混同。

投稿2018/05/11 16:22

編集2018/05/11 16:24
otn

総合スコア84423

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ronronK

2018/05/11 16:38

早速の回答、ありがとうございます。大変助かります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問