我有太多文件包含这样的一行:
Name: transa= N, transb= N, m= 40600, n= 40600, k= 40600, perf= 1635.266 gf
我需要从所有这些中获取 n和perf 。认为有些文件是空的或有错误。这就是我现在所拥有的:
for file in *
do
awk -F "," '{print $(NF-2), $NF}' file1* 2>&1|tee "file1.csv"
awk -F "," '{print $(NF-2), $NF}' file2* 2>&1|tee 2>&1|tee "file2.csv"
done 2>&1 | tee "everything.csv"
一旦循环遍历空文件或错误文件,我就会收到错误。请建议如何检查(NF-2)是否存在。
此外,现在我得到了结果:
n= 1000 perf= 1810.386 gf
n= 10000 perf= 4996.192 gf
n= 13600 perf= 4870.097 gf
n= 1600 perf= 2661.830 gf
我如何得到:
1000 1810.386
10000 4996.192
...
谢谢
答案 0 :(得分:1)
也许
from celery import Celery
from django.conf import settings
# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'my_app.settings')
app = Celery('my_app', broker=settings.BROKER_URL)
# Using a string here means the worker will not have to
# pickle the object when using Windows.
app.config_from_object('django.conf:settings')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
答案 1 :(得分:0)
怎么样:
1;10
4;3
2
1;2;3;4
10;5;1
答案 2 :(得分:0)
你可以这样做:
gawk '/\<n=/ && /\<perf=/ {match($0, /\<n=\s*([[:digit:]]+)/, a); match($0, /\<perf=\s*([[:digit:]]+)/, b); printf "%s %s\n", a[1], b[1]}' * > output
不需要bash循环。
请注意,这是gawk
特定的,因为字边界为\<
。
说明:
gawk '/\<n=/ && /\<perf=/ # match n= and perf= in a line
# ^ ^ only if the n and perf are not the ending of another word
{match($0, /\<n=\s*([[:digit:]]+)/, a); # extract n= number
match($0, /\<perf=\s*([[:digit:]]+)/, b); # extract perf= number
printf "%s %s\n", a[1], b[1]}' # print those two numbers
由于它被写为两个独立的匹配,因此n=
和perf=
可以按行的任何顺序排列。