2

:1つの列の csv ファイルに 2 つの文字を追加するスクリプトを作成するのに助けが必要です。私の調査によると、awk は必要なツールのように見えますが、2 つのソリューションをマージしようとして行き詰まっており、助けを求めています。

私のcsv列には、区切り記号のないMACアドレスが含まれています

000000000000
111111111111
222222222222

変換する出力が必要です

00:00:00:00:00:00
11:11:11:11:11:11
22:22:22:22:22:22

そして、変換したいcsvファイルに約1500個あります。

:2文字ごとに追加する解決策を見つけました:

add=000000000000
echo $add | awk '{for(i=1;i<=length($0);i+=2){printf("%s:",substr($0,i,2))}}'|awk '{sub(/:$/,"")};1' 
00:00:00:00:00:00

列 1 から読み取る例も見つけました。

awk -F "\"*,\"*" '{print $1}' myfile.csv

ただし、列の各行を読み取り、スクリプトを適用してファイルを追加し:、ファイルを列2またはまったく新しいファイルに書き込むのに助けが必要です。

4

5 に答える 5

1

あなたはしようとするかもしれません

awk '{print gensub("([0-9][0-9])([0-9][0-9])([0-9][0-9])([0-9][0-9])([0-9][0-9])([0-9][0-9‌​])","\\1:\\2:\\3:\\4:\\5","g")}' INPUTFILE
于 2013-06-13T05:11:49.950 に答える
0

別の方法sed

sed 's/../:&/2g' file

$ cat file
000000000000
111111111111
222222222222
$ sed 's/../:&/2g' file
00:00:00:00:00:00
11:11:11:11:11:11
22:22:22:22:22:22
于 2013-07-03T21:00:41.727 に答える
0

Perl も実行し、awk が実行しないインプレースでファイルを変更します。

perl -pi -e 's/(..)/$1:/g;s/:$//g' your_file

テスト済み:

> cat temp
000000000000
111111111111
222222222222
> perl -pe 's/(..)/$1:/g;s/:$//g' temp
00:00:00:00:00:00
11:11:11:11:11:11
22:22:22:22:22:22
>

awk を主張する場合:

awk '{gsub("..","&:");print substr($0,0,length($0)-1)}' your_file
于 2013-06-13T06:24:03.430 に答える