期間行のCSVフィールドを後続行系列にコピーする[閉じる]

期間行のCSVフィールドを後続行系列にコピーする[閉じる]

複数の列にいくつかのデータを含むCSVファイルがあります。実際のデータは行11から始まり、すべての列は行11のデータで埋められます。次の4行では、最初の4列(ABCD)は空であるため、11行目のABCD列のデータを12行、13行、14行、15行にコピーする必要があります。 (11-15行)

3706-3710まで16-20、21-25など5行ごとに繰り返す必要があります。 (16行のabcd列データが17~20行にコピーされるなど)

最後の項目は3706 - 3710行にあります。

以下のサンプルファイルから:

hello hello hello hello
hello hello hello hello
hello hello hello hello
hello hello hello hello
hello hello hello hello
hello hello hello hello
hello hello hello hello
hello hello hello hello
hello hello hello hello
hello hello hello hello
colA,colB,colC,colD,colE,colF
,,,,colE,colF
,,,,colE,colF
,,,,colE,colF
,,,,colE,colF
colA,colB,colC,colD,colE,colF
,,,,colE,colF
,,,,colE,colF
,,,,colE,colF
,,,,colE,colF
colA,colB,colC,colD,colE,colF
,,,,colE,colF
,,,,colE,colF
,,,,colE,colF
,,,,colE,colF
colA,colB,colC,colD,colE,colF
,,,,colE,colF
,,,,colE,colF
,,,,colE,colF
,,,,colE,colF
colA,colB,colC,colD,colE,colF
,,,,colE,colF
,,,,colE,colF
,,,,colE,colF
,,,,colE,colF
colA,colB,colC,colD,colE,colF
,,,,colE,colF
,,,,colE,colF
,,,,colE,colF
,,,,colE,colF

ファイルの最後まで、ABCD列の値を次の4行にコピーする必要があります。

ベストアンサー1

次の入力ファイルが与えられた場合:

junk
junk
junk
junk
junk
junk
junk
junk
junk
junk
dataA,dataB,dataC,dataD,dataE,dataF
,,,,dataX,dataY
,,,,dataX,dataY
,,,,dataX,dataY
,,,,dataX,dataY
dataG,dataH,dataI,dataJ,dataK,dataL
,,,,dataX,dataY
,,,,dataX,dataY
,,,,dataX,dataY
,,,,dataX,dataY
dataM,dataN,dataO,dataP,dataQ,dataR
,,,,dataX,dataY
,,,,dataX,dataY
,,,,dataX,dataY
,,,,dataX,dataY

これはトリックを行うようです

$ awk 'BEGIN {FS=","; OFS=","} NR<11 {next} (NR-11)%5==0 { d1=$1;d2=$2;d3=$3;d4=$4 } (NR-11)%5 { print d1,d2,d3,d4,$5,$6}' input2
dataA,dataB,dataC,dataD,dataX,dataY
dataA,dataB,dataC,dataD,dataX,dataY
dataA,dataB,dataC,dataD,dataX,dataY
dataA,dataB,dataC,dataD,dataX,dataY
dataG,dataH,dataI,dataJ,dataX,dataY
dataG,dataH,dataI,dataJ,dataX,dataY
dataG,dataH,dataI,dataJ,dataX,dataY
dataG,dataH,dataI,dataJ,dataX,dataY
dataM,dataN,dataO,dataP,dataX,dataY
dataM,dataN,dataO,dataP,dataX,dataY
dataM,dataN,dataO,dataP,dataX,dataY
dataM,dataN,dataO,dataP,dataX,dataY

awkスクリプトを分析します。

BEGIN {
   FS=","     # Set the field separators for
   OFS=","    # input and output for CSV data
} 

NR<11 {next}  # Skip the first ten lines of the file

(NR-11)%5==0 { # On every fifth line after the tenth,
    d1=$1      # Use variables to hold the data values
    d2=$2      # which are to be copied to the next
    d3=$3      # few rows of output
    d4=$4
}

(NR-11)%5 {    # On all non such lines after the tenth,
   # Print the data, substituting the data held from the marker lines
   print d1,d2,d3,d4,$5,$6
}

おすすめ記事