gpt4 book ai didi

linux - 将每 X 行输入放入一个新列

转载 作者:太空宇宙 更新时间:2023-11-04 10:34:37 25 4
gpt4 key购买 nike

我有一个包含 3972192 行的文件,每行都有两个值制表符。我想将每 47288 行分成一个新列(这派生于 84 列)。我阅读了这些其他问题 ( Put every N rows of input into a new column ),其中它与我想要的一样,但使用 awk 我得到:

awk: program limit exceeded: maximum number of fields size=32767

如果我用 pr 来做,要分隔的列的限制是 36。

为此,我首先使用 awk 选择了第 2 列:

awk '{print $2}' input_file>values_file

为了获得我所做的第一列值:

awk '{print $1}' input_file>headers_file

head -n 47288 headers_file >headers_file2

获得这两个文件后,我将使用粘贴功能将它们放在一起:

paste -d values_file headers_file2 >Desired_output

例子:输入:

 -Line1:        ABCD     12

-Line2: ASDF 3435

...


-Line47288: QWER 345466

-Line47289: ABCD 456

...


-Line94576: QWER 25

...

-Line3972192 QWER 436

期望的输出:

- Line1:         ABCD     12         456 ....

...

- Line47288: QWER 345466 25 .... 436

有什么建议吗?提前致谢,

最佳答案

我想每个 block 都有相同的模式,我的意思是,第一列的顺序相同 [ABCD ASDF ... QWER] 并且再次出现。如果是这样,您必须获取第一个 BLOCK [47288 行] 的第一列并回显到目标文件。然后,您必须获取每个 BLOCK 的第二列并将其粘贴到目标文件中。我试过这个数据文件:

ABCD    1001EFGH    1002IJKL    1003MNOP    1004QRST    1005UVWX    1006ABCD    2001EFGH    2002IJKL    2003MNOP    2004QRST    2005UVWX    2006ABCD    3001EFGH    3002IJKL    3003MNOP    3004QRST    3005UVWX    3006ABCD    4001EFGH    4002IJKL    4003MNOP    4004QRST    4005UVWX    4006ABCD    5001EFGH    5002IJKL    5003MNOP    5004QRST    5005UVWX    5006

And with this script :


#!/bin/bash

#target number of lines, change to 47288
LINES=6
INPUT='data.txt'
TOTALLINES=`wc --lines $INPUT | cut --delimiter=" " --field=1`
TOTALBLOCKS=$((TOTALLINES / LINES))


#getting first block of target file, the first column of first LINES of data file
head -n $LINES $INPUT | cut --field=1 > target.txt

#get second column of each line, by blocks, and paste it into target file
BLOCK=1
while [ $BLOCK -le $TOTALBLOCKS ]
do
HEADVALUE=$((BLOCK * LINES))
head -n $HEADVALUE $INPUT | tail -n $LINES | cut --field=2 > tmpcol.txt
cp target.txt targettmp.txt
paste targettmp.txt tmpcol.txt > target.txt
BLOCK=$((BLOCK+1))
done

#removing temp files
rm -f targettmp.txt
rm -f tmpcol.txt

我得到了这个目标文件:

ABCD    1001    2001    3001    4001    5001EFGH    1002    2002    3002    4002    5002IJKL    1003    2003    3003    4003    5003MNOP    1004    2004    3004    4004    5004QRST    1005    2005    3005    4005    5005UVWX    1006    2006    3006    4006    5006

希望对你有帮助

关于linux - 将每 X 行输入放入一个新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38202895/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com