아래와 비슷한 출력이 있습니다. 이 출력을 사용하지만 유사한 그룹/블록을 사용하여 열을 생성하고 싶습니다. 배관 후 출력을 처리합니다.
id: c2b751c227111edfgdghfhfg19079a466e1916f6df4
blob_size: 1965
weight: 1965
fee: 0.000015690000
fee/byte: 0.000000007984
receive_time: 1613453355 (3 minutes ago)
relayed: 16134535355 (3 minutes ago)
do_not_relay: F
kept_by_block: F
double_spend_seen: F
max_used_block_height: 2279513
max_used_block_id: 44fbf6656dff890aedc29ashfhdfh2f3f848dd94c2dcb79562f5b
last_failed_height: 0
last_failed_id: 0000000000000000000000000000000000000000000000000000000000000000
id: be7e8ec30c8fff9deb33702fd392a566e4a44192138086aaff2d0c9fa82cdbfe
blob_size: 1968
weight: 1968
fee: 0.000015710000
fee/byte: 0.000000007982
receive_time: 13452 (36 seconds ago)
relayed: 16113434534512 (36 seconds ago)
do_not_relay: F
kept_by_block: F
double_spend_seen: F
max_used_block_height: 2234534515
max_used_block_id: 16433ec85ab8a9e81ac714c2cc3171149dfgdfgf34eec4d42e81
last_failed_height: 0
last_failed_id: 0000000000000000000000000000000000000000000000000000000000000000
그것은 마치;
id: 234234 id: 234234234
blob_size: 234234 blob_size: 2342342
. .
. .
. .
[empty line] [empty line]
id :234234234 id: fwfsdfsdfsdf
blob_size: 24234234 blob_size: 234234
. .
. .
. .
누군가가 도울 수 있기를 바랍니다.
건배
답변1
블록을 복제하거나 삭제하지 않고도 홀수 개의 블록을 처리할 수 있음을 보여주기 위해 예제 입력에 세 번째 블록을 추가했으며, 각 줄의 너비를 20자 이하로 만들고 블록당 줄 수를 줄였습니다(아래 참조). 이 답변) 출력이 행과 열로 분할되는 방식을 쉽게 확인할 수 있습니다.
$ cat tst.awk
BEGIN {
RS = ""
FS = "\n"
OFS = "\t"
maxCols = (maxCols ? maxCols : 2)
}
{
numRows = NF
numCols++
for (rowNr=1; rowNr<=numRows; rowNr++) {
vals[rowNr,numCols] = $rowNr
}
}
(NR%maxCols) == 0 { prt() }
END { prt() }
function prt( rowNr,colNr) {
if ( numCols != 0 ) {
for ( rowNr=1; rowNr<=numRows; rowNr++) {
for (colNr=1; colNr<=numCols; colNr++) {
printf "%s%s", vals[rowNr,colNr], (colNr<numCols ? OFS : ORS)
}
}
print ""
numCols = 0
}
}
$ awk -f tst.awk file | column -s$'\t' -tL
id: c2b751c227111edf id: be7e8ec30c8fff9d
blob_size: 1965 blob_size: 1968
weight: 1965 weight: 1968
fee: 0.000015690000 fee: 0.000015710000
fee/byte: 0.00000000 fee/byte: 0.00000000
id: blahblahblahblah
blob_size: 1968
weight: 1968
fee: 0.000015710000
fee/byte: 0.00000000
라인당 블록(열) 출력 수를 2가 아닌 다른 수로 설정하려면 maxCols
라인당 출력하려는 블록(열) 수를 설정하십시오.
$ awk -v maxCols=3 -f tst.awk file | column -s$'\t' -tL
id: c2b751c227111edf id: be7e8ec30c8fff9d id: blahblahblahblah
blob_size: 1965 blob_size: 1968 blob_size: 1968
weight: 1965 weight: 1968 weight: 1968
fee: 0.000015690000 fee: 0.000015710000 fee: 0.000015710000
fee/byte: 0.00000000 fee/byte: 0.00000000 fee/byte: 0.00000000
위의 내용은 이 입력 파일에 대해 실행되었습니다.
$ cat file
id: c2b751c227111edf
blob_size: 1965
weight: 1965
fee: 0.000015690000
fee/byte: 0.00000000
id: be7e8ec30c8fff9d
blob_size: 1968
weight: 1968
fee: 0.000015710000
fee/byte: 0.00000000
id: blahblahblahblah
blob_size: 1968
weight: 1968
fee: 0.000015710000
fee/byte: 0.00000000
답변2
에서 시작하다;
| perl -pe 's/\n/,/g' \
| perl -pe 's/,(id:)/\n$1/g' \
| csvtool transpose - \
| column -t -s ,
그런 다음 루프를 사용하여 2개의 열로 분할하고 선택적으로 다듬습니다.
TC=""
while read L ; do
if [ "$TC" == "" ] ; then
TC="$L"
else
echo -e "$TC\n$L" \
| csvtool transpose - \
| column -t -s ,
echo
TC=""
fi
done < <(cat test.txt \
| perl -pe 's/^(.{24}).*/$1.../g;
s/\n/,/g' \
| perl -pe 's/,(id:)|$/\n$1/g')
echo "$TC" \
| csvtool transpose -
답변3
말이 탈출했는데, 레코드당 행 수가 14개에 공백 구분 기호를 더한 것으로 고정되어 있다면 중간점을 찾는 것보다 더 복잡해야 합니까?
l=$(cat file | wc -l); s=$(( (l / 30)*15+14 )); t=$(( l-s-1 ));
paste <(head -n $s file) <(tail -n $t file)