2 回答

TA貢獻1821條經驗 獲得超6個贊
您能否嘗試以下操作(在顯示的示例中測試和編寫)。
awk -F'"|","' -v lines=$(wc -l < Input_file) '
BEGIN{
print "IP,ports"
}
FNR>1{
num=split($3,array," ")
for(i=1;i<=num;i++){
if(i==1){ printf $2 OFS }
printf("%s%s",array[i],i%5==0||i==num?ORS:FNR==lines && i==num?ORS:",")
if(i%5==0){ printf $2 OFS }
}
}' Input_file
說明:在此處添加上述的詳細說明。
awk -F'"|","' -v lines=$(wc -l < Input_file) ' ##Starting awk program from here.
BEGIN{ ##Starting BEGIN section of this program.
print "IP,ports" ##Printing headers here.
}
FNR>1{ ##Checking condition if current line number is greater than 1st line.
num=split($3,array," ") ##Splitting 3rd field into an array with delimiter space.
for(i=1;i<=num;i++){ ##Traversing through all elements of array here.
if(i==1){ printf $2 OFS } ##if its first element of array then print 2nd field of line and OFS.
printf("%s%s",array[i],i%5==0||i==num?ORS:FNR==lines && i==num?ORS:",") ##Printing array value along with condition if its 5 element or number of total elements equals i then print new line OR current line number equal to lines OR i equals to num then print new line OR print comma.
if(i%5==0){ printf $2 OFS } ##If its 5th element then print current line 2nd field with space
}
}' Input_file

TA貢獻1799條經驗 獲得超9個贊
對于 Python,您可以執行以下操作:
使用 讀取 CSV 文件
csv.DictReader
并使用 . 打開要寫入的文件DictReader
。DictReader
將每一行映射到 adict
,這樣可以更輕松地訪問 CSV 列。使用 .寫入輸出 CSV 標頭
DictWriter.writeheader
。使用循環迭代文件的每一行
for
。使用 . 分割空格上的端口
str.split
。每 5 個端口分塊。我們可以使用如何將列表拆分為大小均勻的塊中的方法? .
遍歷這些塊中的每一個,然后使用
csvwriter.writerow
. 我們確保只包括IP
和Ports
列。
演示:
from csv import DictReader, DictWriter
# Given attribute to https://stackoverflow.com/questions/312443/how-do-you-split-a-list-into-evenly-sized-chunks/312464#312464
def chunks(lst, n):
"""Yield successive n-sized chunks from lst."""
for i in range(0, len(lst), n):
yield lst[i:i + n]
# Open both input and output files
with open("data.csv") as f, open("output.csv", mode="w", newline='') as o:
# Create reading and writing objects
reader = DictReader(f)
writer = DictWriter(o, fieldnames=["IP", "Ports"])
# Write headers
writer.writeheader()
# Go through each line from reader object
for line in reader:
# Split ports by whitespace into a list of ports
ports = line["Ports"].split()
# Go through each chunk(n = 5) of ports
for port_chunk in chunks(ports, 5):
# Write row to output CSV file
row_dict = {"IP": line["IP"], "Ports": ",".join(port_chunk)}
writer.writerow(row_dict)
輸出.csv
IP,Ports
192.168.0.1,"80,8980,6789,443,4778"
192.168.0.1,"3556,7778,4432,5674,7786"
192.168.0.1,"2234,6678,33245,7788,3332"
192.168.0.1,"6678,3322,5432,5567"
192.168.0.2,"80,8980,6789,443,4778"
192.168.0.2,"3556,7778,4432,5674,7786"
192.168.0.2,"2234,6678,33245,7788,3332"
192.168.0.2,"6678,3322,5432,5567"
192.168.0.3,"80,8980,6789,443,4778"
192.168.0.3,"3556,7778,4432,5674,7786"
192.168.0.3,"2234,6678,33245,7788,3332"
192.168.0.3,"6678,3322,5432,5567"
192.168.0.4,"80,8980,6789,443,4778"
192.168.0.4,"3556,7778,4432,5674,7786"
192.168.0.4,"2234,6678,33245,7788,3332"
192.168.0.4,"6678,3322,5432,5567"
添加回答
舉報